<?php
/**
 * Created by PhpStorm.
 * User: ningtaoli
 * Date: 2018/4/24
 * Time: 下午10:40
 */

namespace app\home\controller;
use think\Controller;
use think\Db;

set_time_limit(0);
class Gettree extends Controller
{

    /**
     * 递归无限级分类【先序遍历算】，获取任意节点下所有子孩子
     * @param array $arrCate 待排序的数组
     * @param int $parent_id 父级节点
     * @param int $level 层级数
     * @param int $leve 层级
     * @return array $arrTree 排序后的数组
     */
    public function getChTree($arrCat,$parent_id = 0,$leve = 20, $level = 0)
    {
        static  $arrTree = array(); //使用static代替global
        static  $money = 0;
        if(empty($arrCat))
        {
            return false;
        };
        if($level >= $leve)
        {
            return false;
        }
        $level++;
        foreach($arrCat as $key => $value)
        {
            if($value['fid'] == $parent_id)
            {
                $arrTree[] = $value['uid'];
                $money = $money+$value['acc'];
                $arrTree['ach'] = $money;
                unset($arrCat[$key]); //注销当前节点数据，减少已无用的遍历
                $this->getChTree($arrCat, $value['uid'],$leve =20, $level);
            }
        }

        return $arrTree;
    }
    public function getChlTree($arrCat,$parent_id = 0,$leve = 20, $level = 0)
    {
        static  $arrTree = array(); //使用static代替global
        if(empty($arrCat))
        {
            return false;
        };
        if($level >= $leve)
        {
            return false;
        }
        $level++;
        foreach($arrCat as $key => $value)
        {
            if($value['fid'] == $parent_id)
            {
                $yeji=Db::name('mumber_team')
                    ->where('uid',$value['uid'])
                    ->value('yeji');
                $arrTree[$level][]= [
                    'status'=>$value['status'],
                    'uid'=>$value['uid'],
                    'acc'=>$value['acc'],
                    'yeji'=>$yeji
                ];
                unset($arrCat[$key]); //注销当前节点数据，减少已无用的遍历
                $this->getChlTree($arrCat, $value['uid'],$leve = 20, $level);
            }
        }
        return $arrTree;
    }
    /**
     * 递归无限级分类【先序遍历算】，获取任意节点下所有子孩子
     * @param array $arrCate 待排序的数组
     * @param int $parent_id 父级ID
     * @param int $level 层级数
     * @param array $Money 佣金数组
     * @param int $leve 层级
     * @return array $arrTree 排序后的数组
     * 30代业绩
     */
    public function getFaTree_sum_yei($arrCat,$Money,$leve ,$parent_pid = 0,$money_y,$is_yeji,$uid,$level = 0)
    {
        static  $arrTree = array(); //使用static代替global
        if(empty($arrCat))
        {
            return false;
        };
        if($level >= $leve)
        {
            return false;
        }
        $level++;
        foreach($arrCat as $key => $value)
        {

            if($value['uid'] == $parent_pid)
            {
                if($is_yeji==1){

                   Db::name('mumber_team')
                            ->where('uid',$parent_pid)
                            ->setInc('yeji_zongdai',$money_y);
                }
                unset($arrCat[$key]); //注销当前节点数据，减少已无用的遍历
                $this->getFaTree_sum_yei($arrCat,$Money,$leve,$value['fid'],$money_y,$is_yeji,$uid,$level);
                break;
            }
        }
        return $arrTree;
    }
    /**
     * 递归无限级分类【先序遍历算】，获取任意节点下所有子孩子
     * @param array $arrCate 待排序的数组
     * @param int $parent_id 父级ID
     * @param int $level 层级数
     * @param array $Money 佣金数组
     * @param int $leve 层级
     * @return array $arrTree 排序后的数组
     * 普通产品用
     */
    public function getFaTree($arrCat,$Money,$leve ,$parent_pid = 0,$money_y,$is_yeji,$uid,$level = 0)
    {
        static  $arrTree = array(); //使用static代替global
        if(empty($arrCat))
        {
            return false;
        };
        if($level >= $leve)
        {
            return false;
        }
        $level++;
        $Commission = $Money[$level-1];

        foreach($arrCat as $key => $value)
        {
        
            if($value['uid'] == $parent_pid)
            {
               
                $Arr = [
                    'uid' => $parent_pid,
                    'mymoney' => $value['mymoney']+$Commission,
                    'profit' => $value['profit']+$Commission,
                    'trade_money' => $Commission,
                    'trade_status' => 3,
                    'trade_text' => $level.'级佣金',
                    'uptime'=>time(),
                    'b_id'=>$uid,
                    'trade'=>'佣金结算',
                ];
                $arrTree[] = $Arr;
                //父级佣金修改
                Db::name('mumber')
                    ->where('uid',$Arr['uid'])
                    ->strict(false)
                    ->update($Arr);
                if($is_yeji==1){
                    Db::name('mumber_team')
                        ->where('uid',$parent_pid)
                        ->setInc('yeji',$money_y);
                    Db::name('mumber_team')
                        ->where('uid',$parent_pid)
                        ->setInc('dangri_yeji',$money_y);
                }
                //增加佣金增加记录
                Db::name('trade')
                    ->strict(false)
                    ->insert($Arr);
                unset($arrCat[$key]); //注销当前节点数据，减少已无用的遍历
                $this->getFaTree($arrCat,$Money,$leve,$value['fid'],$money_y,$is_yeji,$uid,$level);
                break;
            }
        }
        return $arrTree;
    }
    public function put_getFaTree($arrCat,$Money,$leve ,$parent_pid = 0,$money_y,$uid,$level = 0){
        static  $arrTree = array(); //使用static代替global
        if(empty($arrCat))
        {
            return false;
        };
        if($level >= $leve)
        {
            return false;
        }
        $level++;
        $Commission = $Money[$level-1];
        foreach($arrCat as $key => $value) {
            if ($value['uid'] == $parent_pid) {
                $Arr = [
                    'uid' => $parent_pid,
                    'mymoney' => $value['mymoney']+$Commission,
                    'profit' => $value['profit']+$Commission,
                    'trade_money' => $Commission,
                    'trade_status' => 3,
                    'trade_text' => '提现奖励',
                    'uptime'=>time(),
                    'b_id'=>$uid,
                    'trade'=>'提现奖励',
                ];
                $arrTree[] = $Arr;
                Db::name('mumber')
                    ->where('uid',$Arr['uid'])
                    ->strict(false)
                    ->update($Arr);
                Db::name('trade')
                    ->strict(false)
                    ->insert($Arr);
                unset($arrCat[$key]); //注销当前节点数据，减少已无用的遍历
                $this->put_getFaTree($arrCat,$Money,$leve,$value['fid'],$money_y,$uid,$level);
                break;
            }
        }
        return $arrTree;
    }
    /**
     * 递归无限级分类【先序遍历算】，获取任意节点下所有子孩子
     * @param array $arrCate 待排序的数组
     * @param int $parent_id 父级ID
     * @param int $level 层级数
     * @param array $Money 佣金数组
     * @param int $leve 层级
     * @return array $arrTree 排序后的数组
     * 秒反产品用
     */
      public function getFaTree_miaofan($arrCat,$Money,$leve ,$parent_pid = 0,$money_y,$level = 0)
    {
        static  $arrTree = array(); //使用static代替global
        if(empty($arrCat))
        {
            return false;
        };
        if($level >= $leve)
        {
            return false;
        }
        $level++;
        $Commission = $Money[$level-1];

        foreach($arrCat as $key => $value)
        {

            if($value['uid'] == $parent_pid)
            {

                $Arr = [
                    'uid' => $parent_pid,
                    'mymoney' => $value['mymoney']+$Commission,
                    'profit' => $value['profit']+$Commission,
                    'trade_money' => $Commission,
                    'trade_status' => 3,
                    'trade_text' => '返还'.$level.'级佣金',
                    'uptime'=>time(),
                    'b_id'=>$parent_pid,
                    'trade'=>'暂无订单',
                ];
                $arrTree[] = $Arr;
                //父级佣金修改
                Db::name('mumber')
                    ->where('uid',$Arr['uid'])
                    ->strict(false)
                    ->update($Arr);
                //父级业绩增加
                $u_yeji=Db::name('mumber_team')
                    ->where('uid',$parent_pid)
                    ->value('yeji');

                $yeji=[
                    'yeji'=>$money_y+$u_yeji,
                ];
                Db::name('mumber_team')
                    ->where('uid',$parent_pid)
                    ->update($yeji);
                //父级当天业绩增加
                $d_yeji=Db::name('mumber_team')
                    ->where('uid',$parent_pid)
                    ->value('d_yeji');
                $yejis=[
                    'd_yeji'=>$money_y+$d_yeji,
                ];
                Db::name('mumber_team')
                    ->where('uid',$parent_pid)
                    ->update($yejis);
                //增加佣金增加记录
                Db::name('trade')
                    ->strict(false)
                    ->insert($Arr);

                unset($arrCat[$key]); //注销当前节点数据，减少已无用的遍历
                $this->getFaTree($arrCat,$Money,$leve,$value['fid'],$money_y,$level);
                break;
            }
        }
        return $arrTree;
    }
}